#ifndef __mon_core__
#define __mon_core__

#include "../mmcc/filehash.h"

namespace mm
{
	struct iwathced : RefalbeImp
	{
		
	};

	struct oproc_t : iwathced
	{
		
	};

	typedef std::map< size_t, oproc_t >	proc_map_t;

	struct md5_t
	{
		uint8_t bb[16];
		bool operator < ( const md5_t & right ) const 
		{
			return memcpy( bb, right.bb, sizeof(bb) ) < 0 ;
		}
	};

	enum actor_class 
	{
		actorProcess,
		actorThread,
		actorMemory,
	};

	struct actor
	{
		actor_class		cls_;

		union {
			size_t		pid_;
			size_t		tid_;
			size_t		mem_;
		}
	};

	typedef std::map< md5_t, actor >	

	struct core_t
	{
		proc_map_t	proc_map_;

		long startup()
		{
		
		}

		long __on_process_create( size_t parent, size_t pid, const char * imagefile )
		{

		}

		long __on_process_exit( size_t pid )
		{
			proc_map_.erase( pid );
		}

		long __on_file_deteted()
		{
			
		}

		long __on_file_created()
		{
		
		}

		long __on_file_renname()
		{
			
		}

		long __on_service_create()
		{
			
		}

		long __on_service_remove()
		{
			
		}

		long __on_service_control()
		{
			
		}

		long __on_reg_key_create()
		{
			
		}

		long __on_reg_key_remove()
		{
			
		}

		long __on_reg_value_set()
		{
		
		}

		long __on_reg_value_del()
		{
		
		}

		long __on_inject_dll()
		{
			
		}

	
	};


};



#endif